1 module unde.games.dizzy.omega.animations.stones; 2 3 import derelict.opengl3.gl; 4 import std.conv; 5 import std.format; 6 import std.math; 7 import std.stdio; 8 import unde.games.collision_detector; 9 import unde.games.dizzy.omega.dizzy; 10 import unde.games.dizzy.omega.main; 11 import unde.games.object; 12 import unde.games.renderer; 13 import unde.global_state; 14 15 class Stones:StaticGameObject 16 { 17 this(MainGameObject root) 18 { 19 frame = -1; 20 21 models["stones-1"] = root.models["stones-1"]; 22 models["stones-2"] = root.models["stones-2"]; 23 24 DizzyOmega dz = cast(DizzyOmega) root; 25 dz.collision_objects["solid"]["Stones1"] = 26 dz.collision_objects["temp-solid"]["Stones1"]; 27 28 super(root); 29 } 30 31 override void draw(GlobalState gs) 32 { 33 DizzyOmega dz = cast(DizzyOmega) root; 34 35 if (abs(root.scrx - 434.0) > 35.0 || abs(root.scry + 70.0) > 16.0) 36 return; 37 38 glPushMatrix(); 39 if (frame < 0) 40 { 41 recursive_render(gs, models["stones-1"]); 42 } 43 else 44 { 45 recursive_render(gs, models["stones-2"]); 46 } 47 glPopMatrix(); 48 } 49 50 override bool tick(GlobalState gs) 51 { 52 DizzyOmega dz = cast(DizzyOmega) root; 53 54 if (frame >= 0 && root.frame - frame == 0) 55 { 56 dz.collision_objects["solid"]["Stones2"] = 57 dz.collision_objects["temp-solid"]["Stones2"]; 58 dz.collision_objects["solid"]["Stones1"] = null; 59 dz.collision_objects["solid"].remove("Stones1"); 60 reset_collision_cache(); 61 } 62 63 return true; 64 } 65 66 override void load(string[string] s) 67 { 68 string p = "stones"; 69 if (p in s) 70 frame = s[p].to!(long); 71 else 72 frame = -1; 73 74 DizzyOmega dz = cast(DizzyOmega) root; 75 if (frame < 0) 76 { 77 dz.collision_objects["solid"]["Stones1"] = 78 dz.collision_objects["temp-solid"]["Stones1"]; 79 dz.collision_objects["solid"]["Stones2"] = null; 80 dz.collision_objects["solid"].remove("Stones2"); 81 reset_collision_cache(); 82 } 83 else 84 { 85 dz.collision_objects["solid"]["Stones2"] = 86 dz.collision_objects["temp-solid"]["Stones2"]; 87 dz.collision_objects["solid"]["Stones1"] = null; 88 dz.collision_objects["solid"].remove("Stones1"); 89 reset_collision_cache(); 90 } 91 } 92 93 override void save(ref string[string] s) 94 { 95 if (frame >= 0) 96 { 97 string p = "stones"; 98 s[p] = frame.to!(string); 99 } 100 } 101 }